module TB_VGA2(
////////////////////	Clock Input	 	////////////////////	 
		CLOCK_27,						//	27 MHz
		CLOCK_50,						//	50 MHz
		EXT_CLOCK,						//	External Clock
		////////////////////	SRAM Interface		////////////////
		SRAM_DQ,						//	SRAM Data bus 16 Bits
		SRAM_ADDR,						//	SRAM Address bus 18 Bits
		SRAM_UB_N,						//	SRAM High-byte Data Mask 
		SRAM_LB_N,						//	SRAM Low-byte Data Mask 
		SRAM_WE_N,						//	SRAM Write Enable
		SRAM_CE_N,						//	SRAM Chip Enable
		SRAM_OE_N,						//	SRAM Output Enable
		////////////////////	VGA		////////////////////////////
		VGA_CLK,   						//	VGA Clock
		VGA_HS,							//	VGA H_SYNC
		VGA_VS,							//	VGA V_SYNC
		VGA_BLANK,						//	VGA BLANK
		VGA_SYNC,						//	VGA SYNC
		VGA_R,   						//	VGA Red[9:0]
		VGA_G,	 						//	VGA Green[9:0]
		VGA_B,  						//	VGA Blue[9:0]
		////////////////////	Push Button		////////////////////
		KEY,							//	Pushbutton[3:0]
		////////////////////	DPDT Switch		////////////////////
		SW								//	Toggle Switch[17:0]
		);

////////////////////////	Clock Input	 	////////////////////////
input			CLOCK_27;				//	27 MHz
input			CLOCK_50;				//	50 MHz
input			EXT_CLOCK;				//	External Clock
////////////////////////	Push Button		////////////////////////
input	[3:0]	KEY;					//	Pushbutton[3:0]
////////////////////////	DPDT Switch		////////////////////////
input	[17:0]	SW;						//	Toggle Switch[17:0]
////////////////////////	SRAM Interface	////////////////////////
inout	[15:0]	SRAM_DQ;				//	SRAM Data bus 16 Bits
output	[17:0]	SRAM_ADDR;				//	SRAM Address bus 18 Bits
output			SRAM_UB_N;				//	SRAM High-byte Data Mask
output			SRAM_LB_N;				//	SRAM Low-byte Data Mask 
output			SRAM_WE_N;				//	SRAM Write Enable
output			SRAM_CE_N;				//	SRAM Chip Enable
output			SRAM_OE_N;				//	SRAM Output Enable
////////////////////////	VGA			////////////////////////////
output			VGA_CLK;   				//	VGA Clock
output			VGA_HS;					//	VGA H_SYNC
output			VGA_VS;					//	VGA V_SYNC
output			VGA_BLANK;				//	VGA BLANK
output			VGA_SYNC;				//	VGA SYNC
output	[9:0]	VGA_R;   				//	VGA Red[9:0]
output	[9:0]	VGA_G;	 				//	VGA Green[9:0]
output	[9:0]	VGA_B;   				//	VGA Blue[9:0]


wire clk;
reg [0:0] cnt = 0;

always @(posedge CLOCK_50) cnt = cnt + 1;
assign clk = cnt[0];
/////////////////////////NEW_TB/////////////////////////

reg clk1 = 1;
reg clk2 = 1;
reg reset = 1;

wire WAIT;
wire [17:0] INIT_ADDR;
wire [15:0] INIT_DATA;
wire INIT_WHICH_BYTE;

wire [17:0] VGA_ADDR;
wire [7:0] VGA_DATA;
reg V_SYNC;
wire VGA_WHICH_BYTE;


wire [17:0] MEM_ADDR;
wire [15:0] MEM_DATA;
wire WE_N;
wire OE_N;
wire UB_N;
wire LB_N;
wire CE_N;


INIT init(
						.clk(clk), 
						.WAIT(WAIT), 
						.ADDR(INIT_ADDR), 
						.DATA(INIT_DATA),
						.WHICH_BYTE(INIT_WHICH_BYTE)
);

//Sram e bus para teste
/*
SRAM sram(
						.ADDR(MEM_ADDR),
						.DATA(MEM_DATA),
						.WE_N(WE_N),
						.OE_N(OE_N),
						.UB_N(UB_N),
						.LB_N(LB_N),
						.CE_N(CE_N)
						);

BUS bus(
						.MEM_ADDR(MEM_ADDR), 
						.MEM_DATA(MEM_DATA), 
						.WE_N(WE_N), 
						.OE_N(OE_N), 
						.UB_N(UB_N), 
						.LB_N(LB_N), 
						.CE_N(CE_N),
						.VGA_ADDR(VGA_ADDR),
						.VGA_DATA(VGA_DATA),
						.V_SYNC(VGA_VS),
						.VGA_WHICH_BYTE(VGA_WHICH_BYTE),
						.INIT_ADDR(INIT_ADDR),
						.INIT_DATA(INIT_DATA),
						.INIT_WHICH_BYTE(INIT_WHICH_BYTE),
						.WAIT(WAIT)
						);
*/


//Bus para DE2

BUS bus(
						.MEM_ADDR(SRAM_ADDR), 
						.MEM_DATA(SRAM_DQ), 
						.WE_N(SRAM_WE_N), 
						.OE_N(SRAM_OE_N), 
						.UB_N(SRAM_UB_N), 
						.LB_N(SRAM_LB_N), 
						.CE_N(SRAM_CE_N),
						.VGA_ADDR(VGA_ADDR),
						.VGA_DATA(VGA_DATA),
						.V_SYNC(VGA_VS),
						.VGA_WHICH_BYTE(VGA_WHICH_BYTE),
						.INIT_ADDR(INIT_ADDR),
						.INIT_DATA(INIT_DATA),
						.INIT_WHICH_BYTE(INIT_WHICH_BYTE),
						.WAIT(WAIT)
						);

VGA_Controller vga(
						.reset(KEY[0]), 
						.clk(clk), 
						.VGA_CLK(VGA_CLK), 
						.VGA_HS(VGA_HS), 
						.VGA_VS(VGA_VS), 
						.VGA_BLANK(VGA_BLANK), 
						.VGA_SYNC(VGA_SYNC), 
						.VGA_R(VGA_R),
						.VGA_B(VGA_B), 
						.VGA_G(VGA_G),
						.VGA_ADDR(VGA_ADDR),
						.VGA_DATA(VGA_DATA),
						.VGA_WHICH_BYTE(VGA_WHICH_BYTE));
						

//TB CLOCKS
/*
always #1 clk1 = !clk1;
always #2 clk2 = !clk2;

initial
 begin
    $dumpfile("test.vcd");
    $dumpvars(0,TB_VGA2);
 end
 

initial
  begin
    #1119100 $finish;
  end
*/
endmodule
